#include "reg_mod_proveedor.h"
#include "ui_reg_mod_proveedor.h"
#include <QDebug>
#define ACTIVO "activo"
#define INACTIVO "inactivo"
Reg_mod_proveedor::Reg_mod_proveedor(QWidget *parent, Proveedor *proveedor) :
    QDialog(parent),
    ui(new Ui::Reg_mod_proveedor)
{
    ui->setupUi(this);

    this->setWindowFlags(Qt::Tool);
    this->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, this->size(), qApp->desktop()->availableGeometry()));

    QDjango::setDebugEnabled(true);
    ui->idLineEdit->setVisible(false);
    //Validaciones
    validatorString = new QRegExpValidator(QRegExp("[^0-9]{50}"),this);
    ui->nombreLineEdit->setValidator(validatorString);
    ui->contactoLineEdit->setValidator(validatorString);

    //Modificar Proveedor
    if (proveedor != NULL)
    {
        this->setWindowTitle("Nuevo Proveedor");
        ui->idLineEdit->setText(QString::number(proveedor->getId_proveedor()));
        ui->nombreLineEdit->setText(proveedor->getNombre());
        ui->contactoLineEdit->setText(proveedor->getContacto());
        ui->rucLineEdit->setText(proveedor->getRuc());
        ui->direccionLineEdit->setText(proveedor->getDireccion());
        ui->telefonoLineEdit->setText(proveedor->getTelefono());
        ui->correoLineEdit->setText(proveedor->getCorreo());

        if (ui->rucLineEdit->text().isEmpty() || ui->telefonoLineEdit->text().isEmpty())
        {
            ui->telefonoLineEdit->setInputMask("999#-999-999");
            ui->rucLineEdit->setInputMask("999999##-9");
        }
        else
        {
            this->setWindowTitle("Editar Proveedor");
        }

        ui->aceptarPushButton->setFocus();
        proveedor->deleteLater();
    }
    else
    {
        this->setWindowTitle("Nuevo Proveedor");
        ui->telefonoLineEdit->setInputMask("999#-999-999");
        ui->rucLineEdit->setInputMask("999999##-9");
    }
}

Reg_mod_proveedor::~Reg_mod_proveedor()
{
    delete ui;
    delete validatorString;
}

void Reg_mod_proveedor::on_cancelarPushButton_clicked()
{
    this->close();
}

void Reg_mod_proveedor::on_aceptarPushButton_clicked()
{
    bool esMod = false;
    Proveedor *prov = new Proveedor();
    if (( (ui->nombreLineEdit->text().simplified() == "") || (ui->direccionLineEdit->text().simplified() == "")
          || (!rucEsValido(ui->rucLineEdit->text().simplified())) || (!telefonoEsValido(ui->telefonoLineEdit->text().simplified()))
          || ((!ui->correoLineEdit->text().simplified().isEmpty()) && (!emailEsValido(ui->correoLineEdit->text().simplified()))) ))
    {
        if (ui->nombreLineEdit->text().simplified() == "")
        {
            ui->nombreLineEdit->setFocus();
            QToolTip::showText(ui->nombreLineEdit->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");
        }
        else
            if (!rucEsValido(ui->rucLineEdit->text().simplified()))
            {
                ui->rucLineEdit->setFocus();
                QToolTip::showText(ui->rucLineEdit->mapToGlobal(QPoint(10,8)), "Verifique el RUC");
            }
            else
                if (ui->direccionLineEdit->text().simplified() == "")
                {
                    ui->direccionLineEdit->setFocus();
                    QToolTip::showText(ui->direccionLineEdit->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");
                }
                else
                    if (!telefonoEsValido(ui->telefonoLineEdit->text().simplified()))
                    {
                        ui->telefonoLineEdit->setFocus();
                        QToolTip::showText(ui->telefonoLineEdit->mapToGlobal(QPoint(10,8)), "Verifique el teléfono");
                    }
                    else
                        if ((!ui->correoLineEdit->text().simplified().isEmpty()) && (!emailEsValido(ui->correoLineEdit->text().simplified())))
                        {
                            ui->correoLineEdit->setFocus();
                            QToolTip::showText(ui->correoLineEdit->mapToGlobal(QPoint(10,8)), "Verifique el correo");
                        }

    }
    else
    {
        if (!ui->idLineEdit->text().simplified().isEmpty())
        {
            prov->setId_proveedor(ui->idLineEdit->text().toInt());
            esMod = true;
        }
        else
        {
            QSqlQuery query;
            query.exec("select coalesce(max(id_proveedor),0) from proveedor");
            int maxId;
            while (query.next())
            {
                maxId = query.value(0).toInt();
            }
            prov->setId_proveedor(maxId + 1);
        }


        prov->setNombre(ui->nombreLineEdit->text());
        prov->setContacto(ui->contactoLineEdit->text());
        prov->setRuc(ui->rucLineEdit->text());
        prov->setDireccion(ui->direccionLineEdit->text());
        prov->setTelefono(ui->telefonoLineEdit->text());
        prov->setCorreo(ui->correoLineEdit->text());
        prov->setEstado(ACTIVO);

        QDjangoQuerySet<Proveedor> proveedores;
        int b = 0;
            if(!esMod)
            {
                Proveedor *pr = proveedores.filter(QDjangoWhere("ruc", QDjangoWhere::Equals, prov->getRuc())).at(0);
                if(existeEnLaBD("proveedor", "ruc", prov->getRuc()))
                {
                    if (pr->getEstado() == INACTIVO)
                    {
                        int resp = cuadroMensaje("", "El proveedor se encuentra como inactivo en la base de datos\nDesea volver a ponerlo activo?", "pregunta");
                        if(resp == QMessageBox::Ok){
                            pr->setEstado(ACTIVO);
                            pr->save();
                            this->close();
                            b=1;
                        }
                        else
                        {
                            this->close();
                        }
                    }
                    else
                    {
                        cuadroMensaje("El proveedor ya existe", "El RUC ingresado ya pertenece a un proveedor registrado");
                        b = 1;
                    }
                }
                else
                {

                pr = proveedores.filter(QDjangoWhere("nombre", QDjangoWhere::Equals, prov->getNombre())).at(0);
                if(existeEnLaBD("proveedor", "nombre", prov->getNombre()))
                {
                    if (pr->getEstado() == INACTIVO)
                    {
                        int resp = cuadroMensaje("", "El proveedor se encuentra como inactivo en la base de datos\nDesea volver a ponerlo activo?", "pregunta");
                        if(resp == QMessageBox::Ok){
                            pr->setEstado(ACTIVO);
                            pr->save();
                            this->close();
                            b=1;
                        }
                        else
                        {
                            this->close();
                        }
                    }
                    else
                    {
                        cuadroMensaje("El proveedor ya existe", "El nombre ingresado ya pertenece a un proveedor registrado");
                        b = 1;
                    }
                }
                }
            }

            if (b == 0)
            {
                prov->save();
                this->close();
            }
        }


}



#undef ACTIVO
#undef INACTIVO

